package com.yangquan.visibility;

// 线程 1 因缓存未感知主线程对 flag 的修改，导致死循环
// 线程 1 的本地缓存未刷新主内存中的 flag 值
public class VisibilityProblem {
    private static boolean flag = false;

    public static void main(String[] args) {
        new Thread(() -> {
            while (!flag) {} // 线程可能永远循环
            System.out.println("线程 1 退出循环");
        }).start();

        new Thread(() -> {
            try { Thread.sleep(1000); } 
            catch (InterruptedException e) {}
            flag = true; // 修改 flag
            System.out.println("线程 2 修改 flag 为 true");
        }).start();
    }
}